package currentment.printOrder;

import java.util.concurrent.atomic.AtomicInteger;

public class PrintInOrder_Atomic {

    // 定义一个原子整数，用于控制线程的交替执行（保证可见性，有序性）
    // 原子类，以无锁的方式来确保对整数的原子操作，确保更新对其他线程是可见的
    private static final AtomicInteger atomicInt = new AtomicInteger(0);
    private static final int MAX_COUNT = 100;

    private static void printNumber(int target) {
        for (int i = 0; i < MAX_COUNT; i++) {
            while (true) {
                if (atomicInt.get() % 3 == target) {
                    System.out.println(Thread.currentThread().getName() + ":" + target);
                    atomicInt.getAndIncrement();
                    break;
                }
            }
        }
    }
    public static void main(String[] args) {
        // 创建三个线程，分别打印 1, 2 和 3
        new Thread(() -> printNumber(0), "A").start();
        new Thread(() -> printNumber(1), "B").start();
        new Thread(() -> printNumber(2), "C").start();
    }

}
